package com.qudian.java.core.service.impl;

import com.qudian.java.core.common.exception.BusinessException;
import com.qudian.java.core.common.utils.ObjectUtil;
import com.qudian.java.core.constant.Constant;
import com.qudian.java.core.service.SendService;
import net.sf.json.JSONObject;
import org.springframework.stereotype.*;
import org.springframework.stereotype.Service;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * Created by zhangdelong on 16/11/22.
 */

@Service
public class SendServiceImpl implements SendService {

    @Override
    public String send(String title, String context) {
        try {
            baseSend(title, context, Constant.getCc());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public String sendWithCc(String title, String context, String cc) {
        try {
            if (ObjectUtil.isEmpty(cc)){
                throw new BusinessException("BIZERROR002","此方法为抄送方法,抄送人不能为空!若无抄送,请访问->'send.do'");
            }
            baseSend(title, context, cc);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String baseSend(String title, String context, String cc) throws Exception {

        JSONObject jsonObject = new JSONObject();
        // 创建Properties 类用于记录邮箱的一些属性
        Properties props = new Properties();
        // 表示SMTP发送邮件，必须进行身份验证
        props.put("mail.smtp.auth", "true");
        // 此处填写SMTP服务器
        props.put("mail.smtp.host", "smtp.qq.com");
        // 端口号，QQ邮箱给出了两个端口，但是另一个我一直使用不了，所以就给出这一个587
        props.put("mail.smtp.port", "587");
        // 此处填写你的账号
        // props.put("mail.user", "xxxxxxx@qq.com");
        // // 此处的密码就是前面说的16位STMP口令
        // props.put("mail.password", "xxxxxxxxxxxxxxxxxxx");

        // 构建授权信息，用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = "353144988@qq.com";
                String password = "hbmchoevviznbifd";
                return new PasswordAuthentication(userName, password);
            }
        };
        // 使用环境属性和授权信息，创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        mailSession.setDebug(true);
        // 创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);
        // 设置发件人
        InternetAddress form = new InternetAddress("353144988@qq.com");
        message.setFrom(form);

        // 设置收件人的邮箱
        InternetAddress to = new InternetAddress("87277859@qq.com");

        message.setRecipient(Message.RecipientType.TO, to);

        // 设置抄送
        if (ObjectUtil.isNotEmpty(cc)) {
            System.out.println("\n 抄送：" + cc);
            InternetAddress[] iaToListcs = new InternetAddress().parse(cc);
            message.setRecipients(Message.RecipientType.CC, iaToListcs);
        }

        // 设置邮件标题
        message.setSubject(title, "text/html;charset=UTF-8");

        // 设置邮件的内容体
        message.setContent(context, "text/html;charset=UTF-8");

        // 最后当然就是发送邮件啦
        Transport.send(message);
        return null;
    }


}
